---
title: "Coronavirus Outbreak"
output:
flexdashboard::flex_dashboard:
orientation: row
vertical_layout: fill
social: [ "twitter", "facebook", "menu"]
source : embed
---
```{r}
library(flexdashboard)
library(knitr)
library(DT)
library(rpivotTable)
library(ggplot2)
library(plotly)
library(dplyr)
library(openintro)
library(highcharter)
library(ggvis)
library(RCurl)
library(tidyverse)
library(rvest)
library(lubridate)
library(gridExtra)
library(ggthemes)
library(scales)
library(hrbrthemes)
library(gganimate)
library(treemap)
library(crosstalk)
library(countrycode)
library(viridis)
```
```{r}
####### data scraping ##############
recovered_url<- getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Recovered.csv")
recovered <- read.csv(text = recovered_url)
confirmed_url <- getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv")
confirmed<- read.csv(text = confirmed_url)
death_url <- getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv")
death<- read.csv(text = death_url)
maps_url <- getURL("https://raw.githubusercontent.com/albertyw/avenews/master/old/data/average-latitude-longitude-countries.csv")
maps<- read.csv(text = maps_url)
pop_url <- "https://www.worldometers.info/world-population/population-by-country/"
pop <- pop_url %>%
html() %>%
html_nodes(xpath ='//*[@id="example2"]' ) %>%
html_table()
population <- pop[[1]]
################# data cleansing ##############
maps <- maps %>% rename(Code = ISO.3166.Country.Code)
confirmed_data <- confirmed %>%
gather(key= "Date", value = "Count", - c(Province.State,Country.Region,Lat,Long)) %>%
mutate(Date = gsub("X","",Date),
Date = gsub("\\.","-",Date),
Date = mdy(Date)) %>%
rename(State = Province.State, Country = Country.Region, Latitude = Lat, Longitude = Long) %>%
mutate(Country = str_replace_all(Country, "\\*", ""),
Country = factor(Country))
confirmed_data <- confirmed_data[,c(2,1,3,4,5,6)]
recovered_data <- recovered %>%
gather(key= "Date", value = "Count", - c(Province.State,Country.Region,Lat,Long)) %>%
mutate(Date = gsub("X","",Date),
Date = gsub("\\.","-",Date),
Date = mdy(Date)) %>%
rename(State = Province.State, Country = Country.Region, Latitude = Lat, Longitude = Long)%>%
mutate(Country = str_replace_all(Country, "\\*", ""),
Country = factor(Country))
recovered_data <- recovered_data[,c(2,1,3,4,5,6)]
death_data <- death %>%
gather(key= "Date", value = "Count", - c(Province.State,Country.Region,Lat,Long)) %>%
mutate(Date = gsub("X","",Date),
Date = gsub("\\.","-",Date),
Date = mdy(Date)) %>%
rename(State = Province.State, Country = Country.Region, Latitude = Lat, Longitude = Long) %>%
mutate(Country = str_replace_all(Country, "\\*", ""),
Country = factor(Country))
death_data <- death_data[,c(2,1,3,4,5,6)]
confirmed_recovered<- confirmed_data %>%
full_join(recovered_data,by = c("Country" = "Country","Date" = "Date", "State" = "State","Latitude"= "Latitude", "Longitude"="Longitude"), suffix=c("_confirmed","_recovered"))
full_table <- confirmed_recovered %>%
full_join(death_data,by = c("Country" = "Country","Date" = "Date", "State" = "State","Latitude"= "Latitude", "Longitude"="Longitude")) %>%
rename(recovered = Count_recovered,
confirmed = Count_confirmed,
death = Count) %>%
mutate(confirmed = replace_na(confirmed,0),
recovered =replace_na(recovered,0),
death = replace_na(death,0))
####################### data manipulation ###############
gather_table <- full_table %>% gather(key= "Status", value = "Count", - c(Country,State, Latitude, Longitude,Date)) %>% mutate(Count = replace_na(Count,0) )
Timelinechart <- gather_table %>% group_by(Date,Status) %>% summarise(Affected = sum(Count))
############### chart #############
options(scipen = 999)
#Timeline <- ggplot(Timelinechart, aes(x=Date, y=Affected)) +
# geom_line(aes(color = Status),na.rm = T) +
# (scale_x_date(breaks=date_breaks("14 days"),
# labels=date_format("%b %d")))+
# geom_point(aes(color = Status),na.rm = T) +
# scale_color_manual(values=c("#F4D03F", "#EC7063", "#58D68D"))+
# xlab("Timeline")
#p <- ggplotly(Timeline) %>% layout(xaxis=list(fixedrange=TRUE)) %>% layout(yaxis=list(fixedrange=TRUE))
p <- hchart(Timelinechart, "line", hcaes(x = Date, y = Affected, group = Status)) %>% hc_title(text = "Timeline",
margin = 20, align = "center",
style = list( useHTML = TRUE))
p <- p %>% hc_add_theme(hc_theme_smpl())
########## Latest Data ############
latest_data<- Timelinechart %>% spread(Status,Affected) %>% arrange(desc(Date)) %>% head(1)
latest_date <- latest_data$Date
latest_Confirmed <- latest_data$confirmed
latest_Death <- latest_data$death
latest_Recovered <- latest_data$recovered
fatality <- sprintf("%.2f %%",100*(latest_Death/latest_Confirmed))
affected_countries <- full_table %>%
mutate(total=confirmed+recovered+death) %>%
filter(total >0) %>%
group_by(Country) %>% count(Country) %>%
mutate(n = 1) %>%
ungroup() %>%
summarise(total = sum(n))
daily_change <- Timelinechart %>%
ungroup() %>%
filter(Status =="confirmed") %>%
arrange(desc(Date)) %>%
head(3) %>%
mutate(last_day=lead(Affected),
Change = (Affected - last_day)/last_day) %>%
select(Change) %>% head(2)
today_change <- daily_change$Change[1]
yday_change <- daily_change$Change[2]
dailychange <- sprintf("%.2f %%",100*today_change)
daily_change_full <- Timelinechart %>%
ungroup() %>%
filter(Status =="confirmed") %>%
arrange(desc(Date)) %>%
mutate(last_day=lead(Affected),
Change = (Affected - last_day)/last_day) %>%
select(Date,Change) %>% mutate(Change = replace_na(Change,0) ,
Change = as.numeric(sprintf("%.2f ",100*(Change))))
p2 <- hchart(daily_change_full, "line", hcaes(x = Date, y = Change)) %>% hc_title(text = "Daily Change %",
margin = 20, align = "center",
style = list( useHTML = TRUE))
p2 <- p2 %>% hc_add_theme(hc_theme_smpl())
```
```{r}
mycolors <- c("blue", "#FFC125", "darkgreen", "darkorange")
```
CoVID-19
=====================================
Row
-------------------------------------
### Confirmed Cases
```{r}
valueBox(latest_Confirmed,
icon = "fas fa-hospital",
color = "#F4D03F")
```
### Recovered
```{r}
valueBox(latest_Recovered,
icon = "fas fa-users fa-sm",
color = "#58D68D")
```
### Death
```{r}
valueBox(latest_Death,
color = "#EC7063")
```
### Affected Countries
```{r}
valueBox(affected_countries,
color ="#AEB6BF",
icon = "fas fa-globe")
```
### Daily Change
```{r}
valueBox(value = dailychange,
color = ifelse(today_change > yday_change, "red","green"),
icon = ifelse(today_change > yday_change, "fas fa-arrow-up","fas fa-arrow-down"))
```
### Fatality Rate
```{r}
valueBox(fatality,
icon = "fa-percent")
```
Row
-------------------------------------
```{r, fig.width=13, fig.height=5}
p
p2
```
Map
=====================================
### MAPS
```{r}
new_data_country <- full_table %>% filter(Date == latest_date)%>% group_by(Country) %>%
summarise(confirmed = sum(confirmed),
death = sum(death),
recovered = sum(recovered)) %>% mutate(iso3 = countrycode(Country, origin = 'country.name', destination = 'iso3c'))
highchart() %>%
hc_add_series_map(worldgeojson,new_data_country,
name = "Country",
value = "confirmed",
joinBy = "iso3") %>%
hc_mapNavigation(enabled = T) %>%
hc_colorAxis(stops = color_stops(10, rev(inferno(n=10,begin =0.1))))
#hc_colorAxis(stops = color_stops(10, rev(inferno(n=10,direction = -1,alpha = 1,begin =0.2))))
#hc_colorAxis(stops = color_stops(10, rev(inferno(10))))
```
By Country
========================================
``` {r}
```
Data Table
=====================================
```{r}
all_ctry <- new_data_country %>% select(c(1,2,4,3)) %>% rename(Confirmed = confirmed, Recovered = recovered, Death = death)
datatable(all_ctry,
caption = "Latest data by country",
class = 'cell-border stripe',
rownames = T,
options = list (pageLength = 50,dom = 'tip'))
```